Indus : An introduction
It’s important to understand the need for a new programming language before learning it. In the case of Indus, it is all the more important as already a variety of programming languages exist that implement programming models across various paradigms. Indus is designed and implemented to provide more power to the developers to implement applications that run across a variety of platforms: be it an 8 bit micro-controller based wireless sensor or a 16/32 bit multimedia product or a 64 bit Server/ PC platform. Existing programming languages are mostly PC centric that require monolithic virtual machines and libraries to execute applications, or are very low level that can not support higher level functionalities, e.g., Service Discovery, Dynamic Networking, Intelligent Message Routing, etc. The result is a proliferation of programming languages, tools, middleware, etc. targeted at specific platforms. The economic cost of this is very high, both in terms of time required and in terms of productivity benefits. Indus is an object oriented programming language that supports massively scalable concurrent computing across a variety of target platforms. The language supports coordination among active concurrent processes to cooperatively execute tasks as well as mechanisms for composing and reusing static logic by active processes. Active processes are called Agents and passive processes (Static logic) are called Components. Any application can therefore be modeled as a set of concurrently executing agents that coordinate among one another and compose components to implement applications. In addition, the Indus programming language subsumes middleware functionality. Existing programming languages are host centric, Indus is network centric and therefore network middleware capabilities such as service discovery, run time connections, message routing, transaction management and policy management are available through a set of run time libraries, collectively called the Container in Indus terminology. Indus programs deployed into a Container transparently provide all the services that are necessary to become network enabled. The new language syntax and semantics for concurrent and distributed programming and the Container facilities for network enabling Indus programs by default, the adoption of the interpreted and compiled ports simply as tools by the Container is another innovation. So far, there has been a debate both in academia and industry on the suitability of compilation versus interpretation as a code generation and execution paradigm for a variety of applications. The fact remains that compilation and interpretation are both suitable in different application execution contexts. Indus therefore makes the Container the centerpiece of application execution that simply uses compilation and interpretation as the execution environment demands. For example, on operating platforms with a operating system and a virtual machine, Indus uses the virtual machine to interpret Indus programs to execute across the network. On platforms that do not have an operating system, the Container itself provides facilities for thread initialization, synchronization, prioritization and inter-process communication. In other cases, the Container uses a combination of interpretation to process Indus application logic and compiled code generated from base libraries that Indus applications use to optimize on code footprint and performance. The Indus container thus becomes a ‘grid engine’ that can run network enabled concurrent programs across a network composed of a variety of hosts ranging from 8 bit micro-controllers to 16/32 bit multimedia platforms to 64 bit PC/Servers.